package com.inkyi.assistant.app.tools.base;

import com.inkyi.assistant.app.tools.comps.EnvironmentVarTool;
import com.inkyi.assistant.app.tools.comps.JsonViewTool;
import com.inkyi.assistant.app.tools.comps.NetworkTool;
import com.inkyi.assistant.app.tools.comps.NovaGeneralPwdTool;
import com.inkyi.framework.common.cache.Cache;
import com.inkyi.framework.common.cache.impl.MemoryCache;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;

/**
 * 墨水工具管理
 *
 * @author lihongkun
 * @date 2025/08/08
 */
public class InkToolsManager {


    private static final Cache TOOLS_CACHE = new MemoryCache();

    public static final Map<String,String> TOOLS_NAME_CODE_MAP = new LinkedHashMap<>();

    static {
        TOOLS_NAME_CODE_MAP.put("销售观密码", "tools-nova-ceneral-pwd");
        TOOLS_NAME_CODE_MAP.put("JSON格式化", "tools-json-view-format");
        TOOLS_NAME_CODE_MAP.put("系统变量", "tools-evn-var");
        TOOLS_NAME_CODE_MAP.put("网络信息", "tools-network-ip");
    }


    /**
     * 获取工具
     *
     * @param code 代码
     * @return {@link InkTools }
     */
    public static InkTools getTools(String code) {
        return getTools(code, false);
    }


    /**
     * 获取工具
     *
     * @param code     代码
     * @param useCache 使用缓存
     * @return {@link InkTools }
     */
    public static InkTools getTools(String code, boolean useCache) {
        InkTools tools = null;
        if (useCache) {
            tools = TOOLS_CACHE.get(code, () -> createTools(code));
        } else {
            tools = createTools(code);
        }
        return tools;
    }

    /**
     * 创建工具
     *
     * @param code 代码
     * @param args arg游戏
     * @return {@link InkTools }
     */
    public static InkTools createTools(String code, Object... args) {
        if (Objects.equals("销售观密码", code)) {
            return new NovaGeneralPwdTool();
        } else if (Objects.equals("JSON格式化", code)) {
            return new JsonViewTool();
        } else if (Objects.equals("系统变量", code)) {
            return new EnvironmentVarTool();
        } else if (Objects.equals("网络信息", code)) {
            return new NetworkTool();
        }
        return null;
    }


}
